package com.excel.poi.util;

import com.excel.poi.sax.AnalysisEventListener;
import com.excel.poi.sax.ExcelReader;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.InputStream;
/**
 *SAX全称Simple API for XML，它是一个接口，也是一个软件包。它是一种XML解析的替代方法，
 * 不同于DOM解析XML文档时把所有内容一次性加载到内存中的方式，它逐行扫描文档，一边扫描，一边解析。
 * 所以那些只需要单遍读取内容的应用程序就可以从SAX解析中受益，这对大型文档的解析是个巨大优势。
 * 另外，SAX “推" 模型可用于广播环境，能够同时注册多个ContentHandler，并行接收事件，而不是在一个管道中一个接一个地进行处理。
 * 一些支持 SAX 的语法分析器包括 Xerces，Apache parser（以前的 IBM 语法分析器）、MSXML（Microsoft 语法分析器）
 * 和 XDK（Oracle 语法分析器）。这些语法分析器是最灵活的，因为它们还支持 DOM。
 * @param in
 * @param excelImportVo
 * @return
 * @throws Exception
 */
/**
 * @author zw
 * @Description https://www.cnblogs.com/wangchl/p/11400025.html
 * @create /2022/3/25
 */
@Slf4j
public class ExcelUtilSax {


    /**
     * 1构造函数赋值 给属性 流 和监听器
     * 2目前支持头占一行，否则报错 (sax是一行一行解析)
     * 3 saveFieldValue 这个方法可以修改，如果类型不满足你的需要，自行添加匹配
     * @param in
     * @param listener
     * @throws Exception
     */
    public static void readBySax(InputStream in, Class c1, AnalysisEventListener listener) throws Exception {
        ExcelReader excelReader = new ExcelReader(in, c1,listener, true);
        //2
        excelReader.read();

    }


}
